package cn.wolfcode.springdemo_2.config;

import cn.wolfcode.springdemo_2.domain.MyDataSource;
//import cn.wolfcode.springdemo_2.domain.OtherBean;
//import cn.wolfcode.springdemo_2.domain.SomeBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.stereotype.Component;

/*
*配置类
* 功能：替代以前的xxx.xml文件
* @Configuration:应用在类上，贴有该注解的类表示Spring的配置类
* @Bean:用在方法上，等价于<bean>标签，该方法返回的对象会交给Spring容器管理
 */

@Configuration

//@ComponentScan:开启组件扫描器，默认扫描当前所在的包，及其子包

@ComponentScan(value = "cn.wolfcode.springdemo_2.domain")
//引入外部的配置文件
/*
*@PropertySource("classpath:db.properties") + @Value("${jdbc.username}")引入外部的配置文件
*
* @Value("${jdbc.username}")  在application.properties 默认的配置文件中查找
 */
@PropertySource("classpath:db.properties")
public class JavaConfig {
//    OtherBean otherBean = new OtherBean();
    /*
    *@Bean：将方法的返回对象交给Spring容器管理
    * <bean id="SomeBean" class="cn.wolfcode.springdemo_2.domain"/></bean>
    * id<=> 该方法名
    *
    *
    * initMethod:对应bean标签中的 init-method="" 配置bean的初始方法
    * destroyMethod:对应bean标签中的 destroy-method="" 配置bean的销毁方法
    * name:对应bean标签中的 name =""用户给bean取别名
    *
    *
     */
//    @Bean(initMethod = "init" ,destroyMethod = "destroy")
//    @Scope(value = "prototype")
//    public SomeBean someBean(){
//
//        return new SomeBean();
//
//    }
//
//    @Bean()
//    @Scope(value = "prototype")
//    public OtherBean someBean(){
//
//        return new SomeBean();
//
//    }


    //在声明SomeBean的方法形参中直接注入orherbean的对象



//    @Bean
//    public SomeBean someBean(OtherBean otherBean){
//        SomeBean someBean = new SomeBean();
//        someBean.setOtherBean(otherBean);
//        return someBean;
//}
//方式二.调用方法注入
//    @Bean
//    public SomeBean someBean(){
//        SomeBean someBean = new SomeBean();
//        someBean.setOtherBean(otherBean);
//        return someBean;
//    }

    @Value("${jdbc.username}")
    private String username;



    @Value("${jdbc.password}")
    private String password;

    @Bean
    public MyDataSource myDataSource(){
        MyDataSource myDataSource = new MyDataSource();
        myDataSource.setPassword(username);
        myDataSource.setUsername(password);

        System.out.println(""+myDataSource.getPassword());
        System.out.println(""+myDataSource.getUsername());
        return myDataSource;

    }
}
